摘要:本文简单的描述了Android WifiManager、WifiService以及wpa_supplicant之间的关系。
1. 框架结构
2. 框架描述
① 应用进程调用Android API,通过例如开关操作WifiManager.setWifiEnabled()对wifi进行控制。
② 应用进程调用API后将通过Binder通信方式将操作传递给WifiService中的WifiServiceImpl(IWifiManager接口实现)。
③ Wifi服务控制是通过状态机机制的WifiStateMachine来实现的,一是它实现了状态切换后对应的各种状态子类,例如默认状态下收到消息应该进行何种处理,连接状态下收到消息应该如何处理,如是而已;二是它包含了WifiNative、WifiMonitor两个对象,WifiNative对应了wifi操作的JNI行为,WifiMonitor通过JNI侦听来自下层wpa_supplicant的事件。
④ com_android_server_wifi_WifiNative为JNI实现部分,它通过wpa_ctrl来创建两个socket作为wpa_supplicant的客户端,一个用来发送控制命令,一个用来侦听,可以分别认为对应了WifiNative和WifiMonitor功能。
⑤ wpa_supplicant作为服务端通过socket接收来自上层的控制,同时通过socket传递wifi状态信息给上层。
⑥ wpa_supplicant与底层驱动进行交互来实现对无线网络进行管理和控制的功能。
3. 相关文件
文件名 | 完整路径 |
---|---|
WifiManager.java | frameworks/base/wifi/java/android/net/wifi/WifiManager.java |
WifiService.java | frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiService.java |
WifiServiceImpl.java | frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiServiceImpl.java |
WifiStateMachine.java | frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiStateMachine.java |
WifiMonitor.java | frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiMonitor.java |
WifiNative.java | frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiNative.java |
com_android_server_wifi_WifiNative.cpp | frameworks/opt/net/wifi/service/jni/com_android_server_wifi_WifiNative.cpp |
wpa_ctrl.c | external/wpa_supplicant_8/src/common/wpa_ctrl.c |
wifi.c | hardware/libhardware_legacy/wifi/wifi.c |
main.c | external/wpa_supplicant_8/wpa_supplicant/main.c |
wpa_supplicant.c | external/wpa_supplicant_8/wpa_supplicant/wpa_supplicant.c |
4. 参考
http://www.cnblogs.com/snake-hand/p/3174650.html
http://www.cnblogs.com/chenbin7/category/503027.html